package com.eshore.textanalyzer.elk.service.impl;

import com.eshore.textanalyzer.elk.common.EsState;
import com.eshore.textanalyzer.elk.dao.TagEsStateDao;
import com.eshore.textanalyzer.elk.pojo.TagEsState;
import com.eshore.textanalyzer.elk.service.TagEsStateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * @author xyd
 * 业务执行状态表接口操作
 * @date 2021/6/2
 */
@Service
public class TagEsStateServiceImpl implements TagEsStateService {

    @Autowired
    private TagEsStateDao tagEsStateDao;

    /**
     * 新增一条状态记录
     * 状态默认为正在执行
     * 月份 or all
     * @param tagEsState
     * @return
     */
    @Override
    public int insertState(TagEsState tagEsState) {
        //获取当前的日期
        Date date = new Date();
        //设置要获取到什么样的时间
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //获取String类型的时间
        String start_time = sdf.format(date);
        // 执行记录新增
        tagEsState.setExecutingState(EsState.EXECUTING);
        tagEsState.setBusinessName("重载" + tagEsState.getBusinessType() + "数据");
        tagEsState.setStartTime(start_time);
        int row = tagEsStateDao.insertSelective(tagEsState);
        return row;
    }

    /**
     * 查询业务流程是否已经在执行
     * 判断执行状态为正在运行中的业务，以及相应的月份
     * 正在执行的则不允许执行
     * 如果all正在执行 则所有月份都不能执行(全量导数)
     * executing_state 执行状态
     * business_type 业务类型 用月份区分yyyy-mm/all表示全量
     * @param business_type
     * @return
     */
    @Override
    public List<TagEsState> checkoutState(String business_type) {
        TagEsState tagEsState = new TagEsState();
        tagEsState.setExecutingState(EsState.EXECUTING);// 正在执行
        tagEsState.setBusinessType(business_type);// 对应的月份或者all
        // 根据business_type返回相应的执行流程 list=0为不存在正在执行的流程
        List<TagEsState> list = tagEsStateDao.checkoutState(tagEsState);
        return list;
    }

    /**
     * 更新状态记录
     * @param tagEsState
     * @return
     */
    @Override
    public int updateState(TagEsState tagEsState) {
        System.out.println("插入的数据：" + tagEsState);
        int row = tagEsStateDao.updateByPrimaryKeySelective(tagEsState);
        return row;
    }
}
